package _77

import (
	"fmt"
	"sort"
)

/*
时间复杂度：O(N)
空间复杂度：O(1)

解:不需要排序后找到左右边界，直接找到最小值min和最大值max即可，求出min和max的个数，然后len(nums)-总个数
*/

func countElements(nums []int) int {
	minVal, maxVal := nums[0], nums[0]
	minCnt, maxCnt := 1, 1
	for i := 1; i < len(nums); i++ {
		if nums[i] < minVal {
			minVal = nums[i]
			minCnt = 1
		} else if nums[i] == minVal {
			minCnt++
		}

		if nums[i] > maxVal {
			maxVal = nums[i]
			maxCnt = 1
		} else if nums[i] == maxVal {
			maxCnt++
		}
	}
	// 如果最大值等于最小值，说明没有符合条件的值
	if minVal == maxVal {
		return 0
	}
	return len(nums) - minCnt - maxCnt
}

func countElements1(nums []int) int {
	sort.Ints(nums)
	left, right := -1, -1
	n := len(nums)
	for i := 1; i < n; i++ {
		if left == -1 && nums[i] != nums[i-1] {
			left = i
		}
		if right == -1 && nums[n-i-1] != nums[n-i] {
			right = n - i
		}
		fmt.Println(left, right)
	}
	if left == -1 || right == -1 || left >= right {
		return 0
	}
	return right - left
}
